#ifndef __OBJECT_H__
#define __OBJECT_H__
#include "Constants.h"

//==MainClass==================================
class Object{
	public:
		Object();
		~Object();
		char* getName();
		short int getValue();
		short int getWeigth();
		short int getIDnumber();

	protected:
		char name[OBJECT_NAME_SIZE];
		short int value;
		short int weigth;
		short int IDnumber;
};

//==Object=====================================
class Creature :public Object{
	public:
		Creature();
		~Creature();
		/*...*/
	private:
		/*...*/
};

class NonMovableObject :public Object{
	public:
		NonMovableObject();
		~NonMovableObject();
		bool isMovable();

	protected:
		bool Movable;
};

class MovableObject :public Object{
	public:
		MovableObject();
		~MovableObject();
		bool isMovable();

	protected:
		bool Movable;
};

//==Creature===================================
class Player :public Creature{
	public:
		Player();
		~Player();
		/*...*/
	private:
		/*...*/
};

class Monster :public Creature{
	public:
		Monster();
		~Monster();
		/*...*/
	private:
		/*...*/
};

class NPC :public Creature{
	public:
		NPC();
		~NPC();
		/*...*/
	private:
		/*...*/
};

//==MovableObject==============================
class Equipment :public MovableObject{
	public:
		Equipment();
		~Equipment();
		short int getItemHealth();

	protected:
		short int itemHealth;
};

class Others :public MovableObject{
	public:
		Others();
		~Others();
		/*...*/
	private:
		/*...*/
};

//==Equipment==================================
class Shield :public Equipment{
	public:
		Shield();
		~Shield();
		short int getBlockChance();

	private:
		short int blockChance;
};

class Armor :public Equipment{
	public:
		Armor();
		~Armor();
		short int getArmorProtection();
		armor_type getArmorType();
	private:
		short int armorProtection;
		armor_type typeOfArmor;
};

class Weapon :public Equipment{
	public:
		Weapon();
		~Weapon();
		short int getWeaponDamage();
		bool isOneHanded();

	protected:
		short int weaponDamage;
		bool oneHanded;

};

class MiscEq :public Equipment{
	public:
		MiscEq();
		~MiscEq();
		/*...*/
	protected:
		/*...*/
};

//==Weapon=====================================
class MeleeWeapon :public Weapon{
	public:
		MeleeWeapon();
		~MeleeWeapon();
		/*...*/
	private:
		/*...*/
};

class DistanceWeapon :public Weapon{
	public:
		DistanceWeapon();
		~DistanceWeapon();
		short int getWeaponRange();

	private:
		short int weaponRange;
};

//==MiscEq=====================================
class Potions :public MiscEq{
	public:
		short int getManaGain();
		short int getLifeGain();
	private:
		short int manaGain;
		short int lifeGain;
};

#endif // __OBJECT_H__
